This is an online tutorial for the plot_map function in collEcol package by Dan Sankey

If you are interested in making a googlemap style plot or video of your solo or group GPS data, but aren’t that familiar with the documentation/help files for the collEcol package, then this tutorial should be for you. Hopefully this tutorial will help solve all your problems, but if not, or you would like me to edit the functions to perform something differently, then don’t hesitate to contact me on dwsankey@gmail.com with any questions or suggestions.

1: Set up environment

if(!require(pacman))
  install.packages("pacman") # Functions for loading required libraries 
Loading required package: pacman
library(pacman)
p_load(ggmap, ggplot2 , plyr , collEcol)

2: Solo GPS traces

Using the example data (from a pigeon homing flight)

data("solo")
plot_map(data = data , type = "solo" , image.or.vid = "image", zoom = 13)
Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=51.43538,-0.578528&zoom=13&size=640x640&scale=2&maptype=satellite&language=en-EN&sensor=false

NA

Plot of a pigeon’s flight over Surrey, England


3. Solo GPS trace videos

plot_map( data = data[1:60,] , file.to.folder = F, image.or.vid = "video", frame.size = 5)
Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=51.455299,-0.585875&zoom=19&size=640x640&scale=2&maptype=satellite&language=en-EN&sensor=false
`panel.margin` is deprecated. Please use `panel.spacing` property instead

This (above) is the function you would use to have a look at parameters and see if it really is the video you want, before saving by selecting file.to.folder = T.

Change the parameters, explore the function with ?plot_map

I save an example to folder in the group video below. Follow that part of the tutorial for extra tips on saving your video.


4. Group/video trace

If you are happy with the parameters you would like for your video then skip straight to section 4. This section is just an example using my (very short) dataset.

It is however, really important to practice with file.to.folder = F . Firstly, to save yourself time in case you get something wrong, but also because google will only let you take a fixed number of images from their website per day. I believe this maximum is 1000 images.

lapply(dataG,head,n=5)
[[1]]
          [,1]     [,2]
[1,] -0.588353 51.44916
[2,] -0.588370 51.44919
[3,] -0.588389 51.44921
[4,] -0.588414 51.44924
[5,] -0.588439 51.44927

[[2]]
          [,1]     [,2]
[1,] -0.588563 51.44931
[2,] -0.588588 51.44933
[3,] -0.588616 51.44936
[4,] -0.588644 51.44938
[5,] -0.588673 51.44940

[[3]]
          [,1]     [,2]
[1,] -0.588679 51.44939
[2,] -0.588703 51.44941
[3,] -0.588730 51.44943
[4,] -0.588759 51.44946
[5,] -0.588790 51.44948

[[4]]
          [,1]     [,2]
[1,] -0.588646 51.44938
[2,] -0.588671 51.44940
[3,] -0.588696 51.44942
[4,] -0.588724 51.44944
[5,] -0.588753 51.44946

[[5]]
          [,1]     [,2]
[1,] -0.588705 51.44940
[2,] -0.588737 51.44942
[3,] -0.588767 51.44944
[4,] -0.588799 51.44946
[5,] -0.588831 51.44948

[[6]]
          [,1]     [,2]
[1,] -0.588578 51.44924
[2,] -0.588598 51.44927
[3,] -0.588624 51.44929
[4,] -0.588647 51.44931
[5,] -0.588671 51.44933

[[7]]
          [,1]     [,2]
[1,] -0.588737 51.44939
[2,] -0.588771 51.44941
[3,] -0.588804 51.44943
[4,] -0.588838 51.44945
[5,] -0.588874 51.44946

[[8]]
          [,1]     [,2]
[1,] -0.588656 51.44938
[2,] -0.588685 51.44940
[3,] -0.588715 51.44942
[4,]
plot_map (data = dataG , type = "group" ,  image.or.vid = "video", tail.size = 20, frame.size = 5, file.to.folder = F, zoom = 19, n.indiv = 8) 
Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=51.449642,-0.58928&zoom=19&size=640x640&scale=2&maptype=satellite&language=en-EN&sensor=false
`panel.margin` is deprecated. Please use `panel.spacing` property instead
[1] "20 / 60"
[1] "25 / 60"
[1] "30 / 60"
[1] "35 / 60"
[1] "40 / 60"
[1] "45 / 60"
[1] "50 / 60"
[1] "55 / 60"
[1] "60 / 60"


5: Export images into folder to make a video

Before you this next chunk it is good to set your working directory to the one to which you would like the images to store.

plot_map(data = dataG, wd = getwd(), plot_name = "my_video" , file.to.folder = T, type = "group" ,  image.or.vid = "video", tail.size = 20, frame.size = 5, zoom = 19, n.indiv = 8)
Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=51.449642,-0.58928&zoom=19&size=640x640&scale=2&maptype=satellite&language=en-EN&sensor=false
`panel.margin` is deprecated. Please use `panel.spacing` property instead
[1] "20 / 60"
[1] "25 / 60"
[1] "30 / 60"
[1] "35 / 60"
[1] "40 / 60"
[1] "45 / 60"
[1] "50 / 60"
[1] "55 / 60"
[1] "60 / 60"

Go to your working directory and export the .png files into a movie maker software.

I highly reccommend imagej as it is efficient, free, and doesn’t take up a lot of memory.

Happy coding!

:)

LS0tDQp0aXRsZTogInBsb3RfbWFwKCkgLSBUdXRvcmlhbCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdA0KICBodG1sX25vdGVib29rOiBkZWZhdWx0DQogIHBkZl9kb2N1bWVudDogZGVmYXVsdA0KLS0tDQoNCg0KDQoNClRoaXMgaXMgYW4gb25saW5lIHR1dG9yaWFsIGZvciB0aGUgcGxvdF9tYXAgZnVuY3Rpb24gaW4gY29sbEVjb2wgcGFja2FnZSBieSBEYW4gU2Fua2V5DQoNCg0KSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIG1ha2luZyBhIGdvb2dsZW1hcCBzdHlsZSBwbG90IG9yIHZpZGVvIG9mIHlvdXIgc29sbyBvciBncm91cCBHUFMgZGF0YSwgYnV0IGFyZW4ndCB0aGF0IGZhbWlsaWFyIHdpdGggdGhlIGRvY3VtZW50YXRpb24vaGVscCBmaWxlcyBmb3IgdGhlIFtjb2xsRWNvbF0oaHR0cHM6Ly9naXRodWIuY29tL3NhbmtleWRhbi9jb2xsRWNvbCkgcGFja2FnZSwgdGhlbiB0aGlzIHR1dG9yaWFsIHNob3VsZCBiZSBmb3IgeW91LiANCkhvcGVmdWxseSB0aGlzIHR1dG9yaWFsIHdpbGwgaGVscCBzb2x2ZSBhbGwgeW91ciBwcm9ibGVtcywgYnV0IGlmIG5vdCwgb3IgeW91IHdvdWxkIGxpa2UgbWUgdG8gZWRpdCB0aGUgZnVuY3Rpb25zIHRvIHBlcmZvcm0gc29tZXRoaW5nIGRpZmZlcmVudGx5LCB0aGVuIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgbWUgb24gZHdzYW5rZXlAZ21haWwuY29tIHdpdGggYW55IHF1ZXN0aW9ucyBvciBzdWdnZXN0aW9ucy4gDQoNCg0KIyMgMTogU2V0IHVwIGVudmlyb25tZW50DQoNCg0KYGBge3J9DQppZighcmVxdWlyZShwYWNtYW4pKQ0KICBpbnN0YWxsLnBhY2thZ2VzKCJwYWNtYW4iKSAjIEZ1bmN0aW9ucyBmb3IgbG9hZGluZyByZXF1aXJlZCBsaWJyYXJpZXMgDQoNCmxpYnJhcnkocGFjbWFuKQ0KcF9sb2FkKGdnbWFwLCBnZ3Bsb3QyICwgcGx5ciAsIGNvbGxFY29sKQ0KDQpgYGANCg0KDQotLS0NCg0KIyMgMjogU29sbyBHUFMgdHJhY2VzIA0KDQpVc2luZyB0aGUgZXhhbXBsZSBkYXRhIChmcm9tIGEgcGlnZW9uIGhvbWluZyBmbGlnaHQpDQpgYGB7Un0NCg0KZGF0YSgic29sbyIpDQoNCnBsb3RfbWFwKGRhdGEgPSBkYXRhICwgdHlwZSA9ICJzb2xvIiAsIGltYWdlLm9yLnZpZCA9ICJpbWFnZSIsIHpvb20gPSAxMykNCiAgICAgICANCg0KYGBgDQoNCg0KUGxvdCBvZiBhIHBpZ2VvbidzIGZsaWdodCBvdmVyIFN1cnJleSwgRW5nbGFuZCANCg0KDQotLS0NCg0KDQojIDMuIFNvbG8gR1BTIHRyYWNlIHZpZGVvcyANCg0KDQoNCmBgYHtSfQ0KDQpwbG90X21hcCggZGF0YSA9IGRhdGFbMTo2MCxdICwgZmlsZS50by5mb2xkZXIgPSBGLCBpbWFnZS5vci52aWQgPSAidmlkZW8iLCBmcmFtZS5zaXplID0gNSkNCg0KYGBgDQoNClRoaXMgKGFib3ZlKSBpcyB0aGUgZnVuY3Rpb24geW91IHdvdWxkIHVzZSB0byBoYXZlIGEgbG9vayBhdCBwYXJhbWV0ZXJzIGFuZCBzZWUgaWYgaXQgcmVhbGx5IGlzIHRoZSB2aWRlbyB5b3Ugd2FudCwgYmVmb3JlIHNhdmluZyBieSBzZWxlY3RpbmcgYGZpbGUudG8uZm9sZGVyID0gVGAuIA0KDQpDaGFuZ2UgdGhlIHBhcmFtZXRlcnMsIGV4cGxvcmUgdGhlIGZ1bmN0aW9uIHdpdGggP3Bsb3RfbWFwDQoNCkkgc2F2ZSBhbiBleGFtcGxlIHRvIGZvbGRlciBpbiB0aGUgZ3JvdXAgdmlkZW8gYmVsb3cuIEZvbGxvdyB0aGF0IHBhcnQgb2YgdGhlIHR1dG9yaWFsIGZvciBleHRyYSB0aXBzIG9uIHNhdmluZyB5b3VyIHZpZGVvLiANCg0KLS0tDQoNCiMjIDQuIEdyb3VwL3ZpZGVvIHRyYWNlDQoNCg0KSWYgeW91IGFyZSBoYXBweSB3aXRoIHRoZSBwYXJhbWV0ZXJzIHlvdSB3b3VsZCBsaWtlIGZvciB5b3VyIHZpZGVvIHRoZW4gc2tpcCBzdHJhaWdodCB0byBzZWN0aW9uIDQuIFRoaXMgc2VjdGlvbiBpcyBqdXN0IGFuIGV4YW1wbGUgdXNpbmcgbXkgKHZlcnkgc2hvcnQpIGRhdGFzZXQuIA0KDQpJdCBpcyBob3dldmVyLCByZWFsbHkgaW1wb3J0YW50IHRvIHByYWN0aWNlIHdpdGggYGZpbGUudG8uZm9sZGVyID0gRmAgLiBGaXJzdGx5LCB0byBzYXZlIHlvdXJzZWxmIHRpbWUgaW4gY2FzZSB5b3UgZ2V0IHNvbWV0aGluZyB3cm9uZywgYnV0IGFsc28gYmVjYXVzZSBnb29nbGUgd2lsbCBvbmx5IGxldCB5b3UgdGFrZSBhIGZpeGVkIG51bWJlciBvZiBpbWFnZXMgZnJvbSB0aGVpciB3ZWJzaXRlIHBlciBkYXkuIEkgYmVsaWV2ZSB0aGlzIG1heGltdW0gaXMgMTAwMCBpbWFnZXMuICANCg0KYGBge1J9DQoNCiMgbG9hZCBpbiB0aGUgZGF0YQ0KDQpkYXRhKCJkYXRhRyIpICMgdGhlc2UgZGF0YSBhcmUgY2FsbGVkIGRhdGFHDQoNCmxhcHBseShkYXRhRyxoZWFkLG49NSkgIyBGaXJzdCA1IHJvd3MgDQpgYGANCg0KDQpgYGB7Un0NCnBsb3RfbWFwIChkYXRhID0gZGF0YUcgLCB0eXBlID0gImdyb3VwIiAsICBpbWFnZS5vci52aWQgPSAidmlkZW8iLCB0YWlsLnNpemUgPSAyMCwgZnJhbWUuc2l6ZSA9IDUsIGZpbGUudG8uZm9sZGVyID0gRiwgem9vbSA9IDE5LCBuLmluZGl2ID0gOCkgDQoNCmBgYCANCg0KLS0tDQoNCiMjIDU6IEV4cG9ydCBpbWFnZXMgaW50byBmb2xkZXIgdG8gbWFrZSBhIHZpZGVvDQoNCg0KQmVmb3JlIHlvdSB0aGlzIG5leHQgIGNodW5rIGl0IGlzIGdvb2QgdG8gc2V0IHlvdXIgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIG9uZSB0byB3aGljaCB5b3Ugd291bGQgbGlrZSB0aGUgaW1hZ2VzIHRvIHN0b3JlLiANCg0KDQoNCmBgYHtSfQ0KDQpwbG90X21hcChkYXRhID0gZGF0YUcsIHdkID0gZ2V0d2QoKSwgcGxvdF9uYW1lID0gIm15X3ZpZGVvIiAsIGZpbGUudG8uZm9sZGVyID0gVCwgdHlwZSA9ICJncm91cCIgLCAgaW1hZ2Uub3IudmlkID0gInZpZGVvIiwgdGFpbC5zaXplID0gMjAsIGZyYW1lLnNpemUgPSA1LCB6b29tID0gMTksIG4uaW5kaXYgPSA4KQ0KDQpgYGANCg0KR28gdG8geW91ciB3b3JraW5nIGRpcmVjdG9yeSBhbmQgZXhwb3J0IHRoZSAucG5nIGZpbGVzIGludG8gYSBtb3ZpZSBtYWtlciBzb2Z0d2FyZS4gDQoNCkkgaGlnaGx5IHJlY2NvbW1lbmQgW2ltYWdlal1bMV0gYXMgaXQgaXMgZWZmaWNpZW50LCBmcmVlLCBhbmQgZG9lc24ndCB0YWtlIHVwIGEgbG90IG9mIG1lbW9yeS4gDQoNCg0KDQoNCkhhcHB5IGNvZGluZyEgDQoNCjopIA0KDQoNClsxXTogaHR0cHM6Ly9pbWFnZWoubmloLmdvdi9pai9kb3dubG9hZC5odG1sDQoNCg0KDQo=